package com.stt.design.model;

import lombok.Data;
import lombok.Getter;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 设计模式：任务类
 */
@Data
public class DesignTask {

    // 提供Getter方法（建造者模式通常不提供Setter）
    @Getter
    private final String title;        // 必填字段
    private final List<String> subtasks; // 子任务列表
    @Getter
    private final int priority;        // 可选字段，默认1
    @Getter
    private final String tag;          // 可选字段，默认"default"

    // 私有构造方法，只能通过Builder构建
    private DesignTask(Builder builder) {
        this.title = builder.title;
        this.subtasks = builder.subtasks;
        this.priority = builder.priority;
        this.tag = builder.tag;
    }

    public List<String> getSubtasks() {
        return new ArrayList<>(subtasks); // 返回副本保护内部数据
    }

    // Builder内部类
    public static class Builder {
        private final String title;     // 必填字段
        private List<String> subtasks = new ArrayList<>();
        private int priority = 1;       // 默认值
        private String tag = "default"; // 默认值

        // Builder构造方法，必填字段作为参数
        public Builder(String title) {
            if (title == null || title.isEmpty()) {
                throw new IllegalArgumentException("标题不能为空");
            }
            this.title = title;
        }

        // 添加子任务（可选，可链式调用）
        public Builder addSubtask(String subtask) {
            this.subtasks.addAll(Arrays.asList(subtask.split(",")));
            return this;
        }

        // 设置优先级（可选）
        public Builder setPriority(int priority) {
            if (priority < 1 || priority > 5) {
                throw new IllegalArgumentException("优先级必须为1-5");
            }
            this.priority = priority;
            return this;
        }

        // 设置标签（可选）
        public Builder setTag(String tag) {
            this.tag = tag;
            return this;
        }

        // 构建Task对象
        public DesignTask build() {
            return new DesignTask(this);
        }
    }
}
